home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / StringReader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  7.8 KB  |  798 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.ChunkyCharArray;
  4. import com.ibm.xml.framework.ParserState;
  5. import com.ibm.xml.framework.ScanContentState;
  6. import com.ibm.xml.framework.StringPool;
  7. import com.ibm.xml.framework.XMLDocumentHandler;
  8. import com.ibm.xml.framework.XMLErrorHandler;
  9. import com.ibm.xml.framework.XMLReader;
  10. import java.io.IOException;
  11. import org.xml.sax.Locator;
  12.  
  13. final class StringReader extends XMLReader {
  14.    private StringPool fStringPool;
  15.    private XMLDocumentHandler fDocumentHandler;
  16.    private XMLErrorHandler fErrorHandler;
  17.    private String fData;
  18.    private int fEndOffset;
  19.    private boolean oweLeadingSpace = false;
  20.    private boolean oweTrailingSpace = false;
  21.  
  22.    StringReader(ParserState var1, boolean var2, Locator var3, int var4) {
  23.       super(var1, var3.getPublicId(), var3.getSystemId());
  24.       super.fLinefeedCounter = var3.getLineNumber();
  25.       super.fCharacterCounter = var3.getColumnNumber();
  26.       this.fStringPool = var1.cacheStringPool();
  27.       this.fDocumentHandler = var1.getDocumentHandler();
  28.       this.fErrorHandler = var1.getErrorHandler();
  29.       this.fData = this.fStringPool.toString(var4);
  30.       super.fCurrentOffset = 0;
  31.       this.fEndOffset = this.fData.length();
  32.       if (var2) {
  33.          this.oweLeadingSpace = true;
  34.          this.oweTrailingSpace = true;
  35.       }
  36.  
  37.    }
  38.  
  39.    public void append(ChunkyCharArray var1, int var2, int var3) {
  40.       var1.append(this.fData.substring(var2, var2 + var3));
  41.    }
  42.  
  43.    public int addString(int var1, int var2) {
  44.       return var2 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var2));
  45.    }
  46.  
  47.    public int addSymbol(int var1, int var2) {
  48.       return var2 == 0 ? 0 : this.fStringPool.addSymbol(this.fData.substring(var1, var1 + var2));
  49.    }
  50.  
  51.    public int skipOneChar() throws IOException {
  52.       if (this.oweLeadingSpace) {
  53.          this.oweLeadingSpace = false;
  54.          return super.fCurrentOffset;
  55.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  56.          if (this.oweTrailingSpace) {
  57.             this.oweTrailingSpace = false;
  58.             return super.fCurrentOffset;
  59.          } else {
  60.             throw new ArrayIndexOutOfBoundsException();
  61.          }
  62.       } else {
  63.          return ++super.fCurrentOffset;
  64.       }
  65.    }
  66.  
  67.    public int skipAsciiChar() throws IOException {
  68.       if (this.oweLeadingSpace) {
  69.          this.oweLeadingSpace = false;
  70.          return super.fCurrentOffset;
  71.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  72.          if (this.oweTrailingSpace) {
  73.             this.oweTrailingSpace = false;
  74.             return super.fCurrentOffset;
  75.          } else {
  76.             throw new ArrayIndexOutOfBoundsException();
  77.          }
  78.       } else {
  79.          return ++super.fCurrentOffset;
  80.       }
  81.    }
  82.  
  83.    public int skipToChar(char var1) throws IOException {
  84.       if (this.oweLeadingSpace) {
  85.          if (var1 == ' ') {
  86.             return super.fCurrentOffset;
  87.          }
  88.  
  89.          this.oweLeadingSpace = false;
  90.       }
  91.  
  92.       while(super.fCurrentOffset < this.fEndOffset) {
  93.          if (var1 == this.fData.charAt(super.fCurrentOffset)) {
  94.             return super.fCurrentOffset;
  95.          }
  96.  
  97.          ++super.fCurrentOffset;
  98.       }
  99.  
  100.       if (this.oweTrailingSpace) {
  101.          if (var1 == ' ') {
  102.             return super.fCurrentOffset;
  103.          }
  104.  
  105.          this.oweTrailingSpace = false;
  106.       }
  107.  
  108.       throw new ArrayIndexOutOfBoundsException();
  109.    }
  110.  
  111.    public int skipPastChar(char var1) throws IOException {
  112.       if (this.oweLeadingSpace) {
  113.          this.oweLeadingSpace = false;
  114.          if (var1 == ' ') {
  115.             return super.fCurrentOffset;
  116.          }
  117.       }
  118.  
  119.       while(super.fCurrentOffset < this.fEndOffset) {
  120.          if (var1 == this.fData.charAt(super.fCurrentOffset)) {
  121.             return ++super.fCurrentOffset;
  122.          }
  123.  
  124.          ++super.fCurrentOffset;
  125.       }
  126.  
  127.       if (this.oweTrailingSpace) {
  128.          this.oweTrailingSpace = false;
  129.          if (var1 == ' ') {
  130.             return super.fCurrentOffset;
  131.          }
  132.       }
  133.  
  134.       throw new ArrayIndexOutOfBoundsException();
  135.    }
  136.  
  137.    public boolean skippedValidChar() throws IOException {
  138.       if (this.oweLeadingSpace) {
  139.          this.oweLeadingSpace = false;
  140.          return true;
  141.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  142.          if (this.oweTrailingSpace) {
  143.             this.oweTrailingSpace = false;
  144.             return true;
  145.          } else {
  146.             throw new ArrayIndexOutOfBoundsException();
  147.          }
  148.       } else {
  149.          char var1 = this.fData.charAt(super.fCurrentOffset++);
  150.          if (var1 < ' ') {
  151.             if (var1 != '\t' && var1 != '\n' && var1 != '\r') {
  152.                --super.fCurrentOffset;
  153.                return false;
  154.             } else {
  155.                return true;
  156.             }
  157.          } else if (var1 > '\ud7ff' && (var1 < '\ue000' || var1 > 'ÔøΩ' && (var1 < 65536 || var1 > 1114111))) {
  158.             --super.fCurrentOffset;
  159.             return false;
  160.          } else {
  161.             return true;
  162.          }
  163.       }
  164.    }
  165.  
  166.    public boolean lookingAtValidChar() throws IOException {
  167.       if (this.oweLeadingSpace) {
  168.          this.oweLeadingSpace = false;
  169.          return true;
  170.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  171.          if (this.oweTrailingSpace) {
  172.             this.oweTrailingSpace = false;
  173.             return true;
  174.          } else {
  175.             throw new ArrayIndexOutOfBoundsException();
  176.          }
  177.       } else {
  178.          char var1 = this.fData.charAt(super.fCurrentOffset);
  179.          if (var1 < ' ') {
  180.             return var1 == '\t' || var1 == '\n' || var1 == '\r';
  181.          } else {
  182.             return var1 <= '\ud7ff' || var1 >= '\ue000' && (var1 <= 'ÔøΩ' || var1 >= 65536 && var1 <= 1114111);
  183.          }
  184.       }
  185.    }
  186.  
  187.    public int skipInvalidChar(int var1) throws Exception {
  188.       char var2;
  189.       if (this.oweLeadingSpace) {
  190.          this.oweLeadingSpace = false;
  191.          var2 = ' ';
  192.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  193.          if (!this.oweTrailingSpace) {
  194.             throw new ArrayIndexOutOfBoundsException();
  195.          }
  196.  
  197.          this.oweTrailingSpace = false;
  198.          var2 = ' ';
  199.       } else {
  200.          var2 = this.fData.charAt(super.fCurrentOffset++);
  201.       }
  202.  
  203.       switch (var1) {
  204.          case 43:
  205.             String var6 = (new Character((char)var2)).toString();
  206.             String var4 = Integer.toHexString(var2);
  207.             this.fErrorHandler.error2(var1, this.fStringPool.addString(var6), this.fStringPool.addString(var4));
  208.             break;
  209.          case 63:
  210.          case 85:
  211.             String var5 = Integer.toHexString(var2);
  212.             this.fErrorHandler.error1(var1, this.fStringPool.addString(var5));
  213.             break;
  214.          case 80:
  215.          case 82:
  216.          case 110:
  217.             String var3 = (new Character((char)var2)).toString();
  218.             this.fErrorHandler.error1(var1, this.fStringPool.addString(var3));
  219.       }
  220.  
  221.       return super.fCurrentOffset;
  222.    }
  223.  
  224.    public boolean skippedChar(char var1) throws IOException {
  225.       if (this.oweLeadingSpace) {
  226.          if (var1 == ' ') {
  227.             this.oweLeadingSpace = false;
  228.             return true;
  229.          } else {
  230.             return false;
  231.          }
  232.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  233.          if (this.oweTrailingSpace) {
  234.             if (var1 == ' ') {
  235.                this.oweTrailingSpace = false;
  236.                return true;
  237.             } else {
  238.                return false;
  239.             }
  240.          } else {
  241.             throw new ArrayIndexOutOfBoundsException();
  242.          }
  243.       } else if (var1 == this.fData.charAt(super.fCurrentOffset)) {
  244.          ++super.fCurrentOffset;
  245.          return true;
  246.       } else {
  247.          return false;
  248.       }
  249.    }
  250.  
  251.    public boolean lookingAtChar(char var1) throws IOException {
  252.       if (this.oweLeadingSpace) {
  253.          return var1 == ' ';
  254.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  255.          if (this.oweTrailingSpace) {
  256.             return var1 == ' ';
  257.          } else {
  258.             throw new ArrayIndexOutOfBoundsException();
  259.          }
  260.       } else {
  261.          return var1 == this.fData.charAt(super.fCurrentOffset);
  262.       }
  263.    }
  264.  
  265.    public boolean skippedSpace() throws IOException {
  266.       if (this.oweLeadingSpace) {
  267.          this.oweLeadingSpace = false;
  268.          return true;
  269.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  270.          if (this.oweTrailingSpace) {
  271.             this.oweTrailingSpace = false;
  272.             return true;
  273.          } else {
  274.             throw new ArrayIndexOutOfBoundsException();
  275.          }
  276.       } else {
  277.          char var1 = this.fData.charAt(super.fCurrentOffset);
  278.          if (var1 != ' ' && var1 != '\t' && var1 != '\n' && var1 != '\r') {
  279.             return false;
  280.          } else {
  281.             ++super.fCurrentOffset;
  282.             return true;
  283.          }
  284.       }
  285.    }
  286.  
  287.    public boolean lookingAtSpace() throws IOException {
  288.       if (this.oweLeadingSpace) {
  289.          return true;
  290.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  291.          if (this.oweTrailingSpace) {
  292.             return true;
  293.          } else {
  294.             throw new ArrayIndexOutOfBoundsException();
  295.          }
  296.       } else {
  297.          char var1 = this.fData.charAt(super.fCurrentOffset);
  298.          return var1 == ' ' || var1 == '\t' || var1 == '\n' || var1 == '\r';
  299.       }
  300.    }
  301.  
  302.    public int skipPastSpaces() throws IOException {
  303.       if (this.oweLeadingSpace) {
  304.          this.oweLeadingSpace = false;
  305.       }
  306.  
  307.       while(super.fCurrentOffset < this.fEndOffset) {
  308.          char var1 = this.fData.charAt(super.fCurrentOffset);
  309.          if (var1 != ' ' && var1 != '\t' && var1 != '\n' && var1 != '\r') {
  310.             return super.fCurrentOffset;
  311.          }
  312.  
  313.          ++super.fCurrentOffset;
  314.       }
  315.  
  316.       if (this.oweTrailingSpace) {
  317.          this.oweTrailingSpace = false;
  318.          return super.fCurrentOffset;
  319.       } else {
  320.          throw new ArrayIndexOutOfBoundsException();
  321.       }
  322.    }
  323.  
  324.    public int skipDecimalDigit() {
  325.       if (this.oweLeadingSpace) {
  326.          return -1;
  327.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  328.          if (this.oweTrailingSpace) {
  329.             return -1;
  330.          } else {
  331.             throw new ArrayIndexOutOfBoundsException();
  332.          }
  333.       } else {
  334.          char var1 = this.fData.charAt(super.fCurrentOffset);
  335.          if (var1 >= '0' && var1 <= '9') {
  336.             ++super.fCurrentOffset;
  337.             return var1 - 48;
  338.          } else {
  339.             return -1;
  340.          }
  341.       }
  342.    }
  343.  
  344.    public int skipHexDigit() {
  345.       if (this.oweLeadingSpace) {
  346.          return -1;
  347.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  348.          if (this.oweTrailingSpace) {
  349.             return -1;
  350.          } else {
  351.             throw new ArrayIndexOutOfBoundsException();
  352.          }
  353.       } else {
  354.          char var1 = this.fData.charAt(super.fCurrentOffset);
  355.          if (var1 <= 'f' && XMLReader.fgAsciiXDigitChar[var1] != 0) {
  356.             ++super.fCurrentOffset;
  357.             return var1 - (var1 < 'A' ? 48 : (var1 < 'a' ? 65 : 97) - 10);
  358.          } else {
  359.             return -1;
  360.          }
  361.       }
  362.    }
  363.  
  364.    public boolean skippedAlpha() {
  365.       if (this.oweLeadingSpace) {
  366.          return false;
  367.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  368.          if (this.oweTrailingSpace) {
  369.             return false;
  370.          } else {
  371.             throw new ArrayIndexOutOfBoundsException();
  372.          }
  373.       } else {
  374.          char var1 = this.fData.charAt(super.fCurrentOffset);
  375.          if (var1 <= 'z' && XMLReader.fgAsciiAlphaChar[var1] == 1) {
  376.             ++super.fCurrentOffset;
  377.             return true;
  378.          } else {
  379.             return false;
  380.          }
  381.       }
  382.    }
  383.  
  384.    private boolean skippedCharWithFlag(byte var1) {
  385.       if (this.oweLeadingSpace) {
  386.          if ((XMLReader.fgCharFlags[32] & var1) != 0) {
  387.             this.oweLeadingSpace = false;
  388.             return true;
  389.          } else {
  390.             return false;
  391.          }
  392.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  393.          if (this.oweTrailingSpace) {
  394.             if ((XMLReader.fgCharFlags[32] & var1) != 0) {
  395.                this.oweTrailingSpace = false;
  396.                return true;
  397.             } else {
  398.                return false;
  399.             }
  400.          } else {
  401.             throw new ArrayIndexOutOfBoundsException();
  402.          }
  403.       } else {
  404.          char var2 = this.fData.charAt(super.fCurrentOffset);
  405.          if (var2 < 128 && (XMLReader.fgCharFlags[var2] & var1) != 0) {
  406.             ++super.fCurrentOffset;
  407.             return true;
  408.          } else {
  409.             return false;
  410.          }
  411.       }
  412.    }
  413.  
  414.    public final boolean skippedVersionNum() {
  415.       return this.skippedCharWithFlag((byte)1);
  416.    }
  417.  
  418.    public final boolean skippedEncName() {
  419.       return this.skippedCharWithFlag((byte)2);
  420.    }
  421.  
  422.    public final boolean skippedPubidChar() {
  423.       if (this.oweLeadingSpace) {
  424.          this.oweLeadingSpace = false;
  425.          return true;
  426.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  427.          if (this.oweTrailingSpace) {
  428.             this.oweTrailingSpace = false;
  429.             return true;
  430.          } else {
  431.             throw new ArrayIndexOutOfBoundsException();
  432.          }
  433.       } else {
  434.          char var1 = this.fData.charAt(super.fCurrentOffset);
  435.          if (var1 < 128) {
  436.             if ((XMLReader.fgCharFlags[var1] & 4) != 0) {
  437.                ++super.fCurrentOffset;
  438.                return true;
  439.             }
  440.  
  441.             if (var1 == '\n') {
  442.                ++super.fCurrentOffset;
  443.                ++super.fLinefeedCounter;
  444.                return true;
  445.             }
  446.  
  447.             if (var1 == '\r') {
  448.                ++super.fCurrentOffset;
  449.                ++super.fCarriageReturnCounter;
  450.                return true;
  451.             }
  452.          }
  453.  
  454.          return false;
  455.       }
  456.    }
  457.  
  458.    public boolean skippedString(char[] var1) throws IOException {
  459.       if (this.oweLeadingSpace) {
  460.          return false;
  461.       } else {
  462.          int var2 = super.fCurrentOffset;
  463.  
  464.          for(int var3 = 0; var3 < var1.length; ++var3) {
  465.             if (super.fCurrentOffset >= this.fEndOffset) {
  466.                if (this.oweTrailingSpace) {
  467.                   return false;
  468.                }
  469.  
  470.                throw new ArrayIndexOutOfBoundsException();
  471.             }
  472.  
  473.             if (this.fData.charAt(var2) != var1[var3]) {
  474.                return false;
  475.             }
  476.  
  477.             ++var2;
  478.          }
  479.  
  480.          super.fCurrentOffset = var2;
  481.          return true;
  482.       }
  483.    }
  484.  
  485.    public int skipPastName(char var1) throws IOException {
  486.       if (this.oweLeadingSpace) {
  487.          return super.fCurrentOffset;
  488.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  489.          if (this.oweTrailingSpace) {
  490.             return super.fCurrentOffset;
  491.          } else {
  492.             throw new ArrayIndexOutOfBoundsException();
  493.          }
  494.       } else {
  495.          char var2 = this.fData.charAt(super.fCurrentOffset);
  496.          if ((XMLReader.fgCharFlags[var2] & 16) == 0) {
  497.             return super.fCurrentOffset;
  498.          } else {
  499.             do {
  500.                ++super.fCurrentOffset;
  501.                if (super.fCurrentOffset >= this.fEndOffset) {
  502.                   if (this.oweTrailingSpace) {
  503.                      return super.fCurrentOffset;
  504.                   } else {
  505.                      throw new ArrayIndexOutOfBoundsException();
  506.                   }
  507.                }
  508.  
  509.                var2 = this.fData.charAt(super.fCurrentOffset);
  510.                if (var1 == var2) {
  511.                   return super.fCurrentOffset;
  512.                }
  513.             } while((XMLReader.fgCharFlags[var2] & 32) != 0);
  514.  
  515.             return super.fCurrentOffset;
  516.          }
  517.       }
  518.    }
  519.  
  520.    public int scanName(char var1, int var2) throws IOException {
  521.       int var3 = super.fCurrentOffset;
  522.       int var4 = this.skipPastName(var1) - var3;
  523.       if (var4 == 0) {
  524.          return -1;
  525.       } else {
  526.          int var5 = this.fStringPool.addSymbol(this.fData.substring(var3, var3 + var4));
  527.          return var2 != -1 && var2 != var5 ? -1 : var5;
  528.       }
  529.    }
  530.  
  531.    public int skipPastNmtoken(char var1) throws IOException {
  532.       if (this.oweLeadingSpace) {
  533.          return super.fCurrentOffset;
  534.       } else if (super.fCurrentOffset >= this.fEndOffset) {
  535.          if (this.oweTrailingSpace) {
  536.             return super.fCurrentOffset;
  537.          } else {
  538.             throw new ArrayIndexOutOfBoundsException();
  539.          }
  540.       } else {
  541.          for(char var2 = this.fData.charAt(super.fCurrentOffset); var1 != var2; var2 = this.fData.charAt(super.fCurrentOffset)) {
  542.             if ((XMLReader.fgCharFlags[var2] & 32) == 0) {
  543.                return super.fCurrentOffset;
  544.             }
  545.  
  546.             ++super.fCurrentOffset;
  547.             if (super.fCurrentOffset >= this.fEndOffset) {
  548.                if (this.oweTrailingSpace) {
  549.                   return super.fCurrentOffset;
  550.                }
  551.  
  552.                throw new ArrayIndexOutOfBoundsException();
  553.             }
  554.          }
  555.  
  556.          return super.fCurrentOffset;
  557.       }
  558.    }
  559.  
  560.    private void callCharDataHandler(int var1, int var2, boolean var3) throws Exception {
  561.       int var4 = var2 - var1;
  562.       if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
  563.          int var5 = var4 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var4));
  564.          this.fDocumentHandler.characters(var5, var3);
  565.       } else {
  566.          this.fDocumentHandler.characters(this.fData.toCharArray(), var1, var4, var3);
  567.       }
  568.    }
  569.  
  570.    private void callWSCharDataHandler(int var1, int var2, boolean var3) throws Exception {
  571.       int var4 = super.fParserState.getScanner().getCurrentContentSpecType();
  572.       if (var4 != 4) {
  573.          this.callCharDataHandler(var1, var2, var3);
  574.       } else {
  575.          int var5 = var2 - var1;
  576.          if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
  577.             int var6 = var5 == 0 ? 0 : this.fStringPool.addString(this.fData.substring(var1, var1 + var5));
  578.             this.fDocumentHandler.ignorableWhitespace(var6, var3);
  579.          } else {
  580.             this.fDocumentHandler.ignorableWhitespace(this.fData.toCharArray(), var1, var5, var3);
  581.          }
  582.       }
  583.    }
  584.  
  585.    public int scanContent(ScanContentState var1) throws Exception {
  586.       int var2 = super.fCurrentOffset;
  587.       if (super.fCurrentOffset >= this.fEndOffset) {
  588.          throw new ArrayIndexOutOfBoundsException();
  589.       } else {
  590.          char var3 = this.fData.charAt(super.fCurrentOffset++);
  591.          if (var3 < 128) {
  592.             byte var4 = XMLReader.fgCharFlags[var3];
  593.             if ((var4 & 8) == 0 && var3 != '\n' && var3 != '\r') {
  594.                if (var3 == '<') {
  595.                   if (!var1.inCDSect) {
  596.                      return 1;
  597.                   }
  598.                } else if (var3 == '&') {
  599.                   if (!var1.inCDSect) {
  600.                      return 2;
  601.                   }
  602.                } else {
  603.                   if (var3 != ']') {
  604.                      --super.fCurrentOffset;
  605.                      return 4;
  606.                   }
  607.  
  608.                   if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
  609.                      super.fCurrentOffset += 2;
  610.                      if (!var1.inCDSect) {
  611.                         return 3;
  612.                      }
  613.  
  614.                      var1.inCDSect = false;
  615.                      return this.scanContent(var1);
  616.                   }
  617.                }
  618.             } else if (var3 == ' ' || var3 == '\t' || var3 == '\n' || var3 == '\r') {
  619.                do {
  620.                   if (super.fCurrentOffset >= this.fEndOffset) {
  621.                      if (this.fDocumentHandler != null) {
  622.                         this.callWSCharDataHandler(var2, this.fEndOffset, var1.inCDSect);
  623.                      }
  624.  
  625.                      throw new ArrayIndexOutOfBoundsException();
  626.                   }
  627.  
  628.                   if (var3 == '\n') {
  629.                      ++super.fLinefeedCounter;
  630.                   } else if (var3 == '\r') {
  631.                      ++super.fCarriageReturnCounter;
  632.                   }
  633.  
  634.                   var3 = this.fData.charAt(super.fCurrentOffset++);
  635.                } while(var3 == ' ' || var3 == '\t' || var3 == '\n' || var3 == '\r');
  636.  
  637.                if (var3 < 128) {
  638.                   var4 = XMLReader.fgCharFlags[var3];
  639.                   if ((var4 & 8) == 0) {
  640.                      if (var3 == '<') {
  641.                         if (!var1.inCDSect) {
  642.                            if (this.fDocumentHandler != null) {
  643.                               this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  644.                            }
  645.  
  646.                            return 25;
  647.                         }
  648.                      } else if (var3 == '&') {
  649.                         if (!var1.inCDSect) {
  650.                            if (this.fDocumentHandler != null) {
  651.                               this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  652.                            }
  653.  
  654.                            return 26;
  655.                         }
  656.                      } else {
  657.                         if (var3 != ']') {
  658.                            --super.fCurrentOffset;
  659.                            if (this.fDocumentHandler != null) {
  660.                               this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  661.                            }
  662.  
  663.                            return 28;
  664.                         }
  665.  
  666.                         if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
  667.                            if (this.fDocumentHandler != null) {
  668.                               this.callWSCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  669.                            }
  670.  
  671.                            super.fCurrentOffset += 2;
  672.                            if (!var1.inCDSect) {
  673.                               return 27;
  674.                            }
  675.  
  676.                            var1.inCDSect = false;
  677.                            return this.scanContent(var1);
  678.                         }
  679.                      }
  680.                   }
  681.                } else if (var3 == '\ufffe' || var3 == '\uffff') {
  682.                   --super.fCurrentOffset;
  683.                   if (this.fDocumentHandler != null) {
  684.                      this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  685.                   }
  686.  
  687.                   return 28;
  688.                }
  689.             }
  690.          } else if (var3 == '\ufffe' || var3 == '\uffff') {
  691.             --super.fCurrentOffset;
  692.             if (this.fDocumentHandler != null) {
  693.                this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  694.             }
  695.  
  696.             return 4;
  697.          }
  698.  
  699.          while(true) {
  700.             if (super.fCurrentOffset >= this.fEndOffset) {
  701.                if (this.fDocumentHandler != null) {
  702.                   this.callCharDataHandler(var2, this.fEndOffset, var1.inCDSect);
  703.                }
  704.  
  705.                throw new ArrayIndexOutOfBoundsException();
  706.             }
  707.  
  708.             var3 = this.fData.charAt(super.fCurrentOffset++);
  709.             if (var3 >= 128) {
  710.                break;
  711.             }
  712.  
  713.             byte var7 = XMLReader.fgCharFlags[var3];
  714.             if ((var7 & 8) == 0) {
  715.                if (var3 == '\n') {
  716.                   ++super.fLinefeedCounter;
  717.                } else {
  718.                   if (var3 != '\r') {
  719.                      break;
  720.                   }
  721.  
  722.                   ++super.fCarriageReturnCounter;
  723.                }
  724.             }
  725.          }
  726.  
  727.          while(true) {
  728.             if (var3 < 128) {
  729.                byte var8 = XMLReader.fgCharFlags[var3];
  730.                if ((var8 & 8) == 0) {
  731.                   if (var3 == '<') {
  732.                      if (!var1.inCDSect) {
  733.                         if (this.fDocumentHandler != null) {
  734.                            this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  735.                         }
  736.  
  737.                         return 9;
  738.                      }
  739.                   } else if (var3 == '&') {
  740.                      if (!var1.inCDSect) {
  741.                         if (this.fDocumentHandler != null) {
  742.                            this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  743.                         }
  744.  
  745.                         return 10;
  746.                      }
  747.                   } else if (var3 == '\n') {
  748.                      ++super.fLinefeedCounter;
  749.                   } else if (var3 == '\r') {
  750.                      ++super.fCarriageReturnCounter;
  751.                   } else {
  752.                      if (var3 != ']') {
  753.                         --super.fCurrentOffset;
  754.                         if (this.fDocumentHandler != null) {
  755.                            this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  756.                         }
  757.  
  758.                         return 12;
  759.                      }
  760.  
  761.                      if (super.fCurrentOffset + 2 <= this.fEndOffset && this.fData.charAt(super.fCurrentOffset) == ']' && this.fData.charAt(super.fCurrentOffset + 1) == '>') {
  762.                         if (this.fDocumentHandler != null) {
  763.                            this.callCharDataHandler(var2, super.fCurrentOffset - 1, var1.inCDSect);
  764.                         }
  765.  
  766.                         super.fCurrentOffset += 2;
  767.                         if (!var1.inCDSect) {
  768.                            return 11;
  769.                         }
  770.  
  771.                         var1.inCDSect = false;
  772.                         return this.scanContent(var1);
  773.                      }
  774.                   }
  775.                }
  776.             } else if (var3 == '\ufffe' || var3 == '\uffff') {
  777.                --super.fCurrentOffset;
  778.                if (this.fDocumentHandler != null) {
  779.                   this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  780.                }
  781.  
  782.                return 12;
  783.             }
  784.  
  785.             if (super.fCurrentOffset >= this.fEndOffset) {
  786.                if (this.fDocumentHandler != null) {
  787.                   this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
  788.                }
  789.  
  790.                throw new ArrayIndexOutOfBoundsException();
  791.             }
  792.  
  793.             var3 = this.fData.charAt(super.fCurrentOffset++);
  794.          }
  795.       }
  796.    }
  797. }
  798.